package 力扣;

import java.util.ArrayList;
import java.util.List;

/**
  给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
  给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
 输入："23"
 输出：["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
 */
public class _17电话号码的字母组合 {

    // for 循环 +递归
    private static final String[] KEYS = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    public List<String> letterCombinations(String digits) {
        List<String> ret = new ArrayList<>();
        if (digits != null && digits.length() != 0) {

            combination("",digits,0,ret);
        }
        return ret;

    }

    private void combination(String prefix, String digits, int offset, List<String> ret) {
     if( digits.length() == offset){
         ret.add(prefix);
         return;
     }
     // 获取当前digits 位置数字的拨号数字
        String key = KEYS[digits.charAt(offset)-'0'];
        for( char c : key.toCharArray()){
            combination(prefix+c,digits,offset+1,ret);
        }
    }
}
